#include "driver_led.h"
#include "main.h"
#include <stdio.h>
#include <string.h>


void LED_GPIO_Init(pLedDevice led)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  
  if(strcmp(led->name, "LED_BLUE") == 0)
  {
      GPIO_InitStruct.Pin = LED1_Pin;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
      HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
  }
  if(strcmp(led->name, "LED_YELLOW") == 0)
  {
      GPIO_InitStruct.Pin = LED2_Pin;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
      HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
  } 
}


int LedSetStatus(struct ledDevice *pDev , int status)
{
    if(pDev == NULL)
    {
        return PDFAIL;
    }
//    GPIO_PinState pinstatus = status ? GPIO_PIN_SET : GPIO_PIN_RESET;
    if(strcmp(pDev->name, "LED_BLUE") == 0)
    {
        if(status == LED_ON)  
        {
            HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
        }
        else if(status == LED_OFF) 
        {
            HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
        }else{
            HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
        }
	}
    else if(strcmp(pDev->name, "LED_YELLOW") == 0)
    {
        if(status == LED_ON)  
        {
            HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
        }
        else if(status == LED_OFF) 
        {
            HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
        }else{
            HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
        }
	}else{ 
        return PDFAIL;
    }
    return PDSUCCESS;
}

